class Watcher {
  constructor(vm, key, cb){
    this.vm = vm
    // 订阅的属性
    this.key = key
    // 执行的回调
    this.cb = cb
    // 触发getter前，将当前订阅者实例存储给Dep类
    Dep.target= this
    this.oldValue = vm[key]
    // 操作完毕后，清除target，用于存储下一个Watcher实例
    Dep.target= null
  }
  // 封装数据变化时更新视图的功能
  update () {
    const newValue = this.vm[this.key]
    if (newValue === this.oldValue) {
      // 无需更新
      return
    }
    // 数据改变，调用更新后的回调
    this.cb(newValue)
  }
}